package com.gjintel.framework.user.dao;

import java.util.List;

import com.gjintel.framework.dict.model.Dictionary;
//import com.gjintel.framework.goodstype.model.GoodsType;
import com.gjintel.framework.role.model.Role;
import com.gjintel.framework.user.model.User;
import com.gjintel.framework.user.model.UserRole;
import com.gjintel.sdk.base.dao.Page;
import com.gjintel.sdk.base.dao.Sort;

/**
 * @description 用户数据访问接口
 * @author fengya
 * @date 2015-7-31 下午01:05:52
 */
public interface IUserDao {
	/**
	 * @description 查询所有的用户信息
	 * @author fengya
	 * @date 2015-7-31 下午01:14:38
	 * @param page
	 * @param user
	 * @param sort
	 * @return void
	 */
	List<User> findAll();

	/**
	 * @description 分页显示用户信息
	 * @author fengya
	 * @date 2015-7-31 下午01:06:33
	 * @param page
	 * @param user
	 * @param sort
	 * @return void
	 */
	@SuppressWarnings("unchecked")
	List<User> findAll(Page page, User user, Sort sort,int loginUserType,String loginUserDeptUnit,String roles);

	/**
	 * @description 根据用户得到用户关联的角色关联
	 * @author fengya
	 * @date 2015-7-31 下午01:06:50
	 * @param userId
	 * @return
	 * @return List<UserRole>
	 */
	List<UserRole> getUserRole(String roleId);

	/**
	 * @description 根据用户ID得到用户关联的角色
	 * @author fengya
	 * @date 2015-7-31 下午01:07:21
	 * @param userId
	 * @return
	 * @return List<Role>
	 */
	List<Role> getUserRoles(String userId);

	/**
	 * @description 通过角色得到角色下的用户
	 * @author fengya
	 * @date 2015-7-31 下午01:07:41
	 * @param page
	 * @param roleId
	 * @param sort
	 * @param roleUser
	 * @return void
	 */
	@SuppressWarnings("unchecked")
	void roleUsers(Page page, String roleId, Sort sort, boolean roleUser);

	/**
	 * @description 根据用户名查询用户
	 * @author fengya
	 * @date 2015-7-31 下午01:08:24
	 * @param loginName
	 * @return
	 * @return List<User>
	 */
	List<User> login(String loginName);
	
	/**
	 * @description 根据单位名查询用户
	 * @author fengya
	 * @date 2015-7-31 下午01:08:24
	 * @param loginName
	 * @return
	 * @return List<User>
	 */
	List<User> getUserByCompany(String company);
	
	
	/**
	 * @description 根据用户类型获得该类型下所有的用户信息
	 * @author fengya
	 * @date 2016-3-16 下午01:37:35
	 * @param page
	 * @param userType
	 * @param sort
	 * @return void
	 */
	void getUsers(Page page, String userType, Sort sort);

	/**
	 * 删除用户角色
	 * @param roleIds
	 */
	void removeUserRole(String userId);

	/**
	 * 删除用户权限
	 * @param rightVal
	 */
	void removeUserRight(String userId);

	/**
	 * 删除用户商品管理权限
	 * @param goodsTypeIds
	 */
	void removeGoodsType(String userId);

	/**
	 * 保存用户角色信息
	 * @param user
	 * @param userIds
	 * @param roleIds
	 */
	void saveUserRole(User user,String userId, String roleIds);

	/**
	 * 保存用户权限信息
	 * @param userIds
	 * @param rightVal
	 */
	void saveUserRight(String userId, String rightVal);

	/**
	 * 保存用户商品类型权限信息
	 * @param userIds
	 * @param goodsTypeIds
	 */
	void saveUserGoodsType(String userId, String goodsTypeIds);
	
	/**
	 * 获取指定用户的权限列表
	 * @param userId
	 * @return
	 */
	List<Dictionary> getUserRights(String userId);

//	/**
//	 * 获取指定用户的商品类型管理列表
//	 * @param userId
//	 * @return
//	 */
//	List<GoodsType> getUserGoodsType(String userId);
	
	/**
	 * @description ca登录
	 * @author fengya
	 * @date 2016-4-11 上午03:18:25
	 * @param caName
	 * @return
	 * @return List<User>
	 */
	List<User> caLogin(String caName);
	
	/**
	 * @description 获取非删除的用户信息
	 * @author shy
	 * @date 2016-9-21
	 * @return
	 * @return List<User>
	 */
	List<User> getLoginUser(String loginName);
	
	/**
	 * @description 获取用户信息（唯一用户登录名）
	 * @author shy
	 * @date 2016-9-21
	 * @return
	 * @return List<User>
	 */
	List<User> getLoginUserByLoginName(String loginName);

	User getUserByRegisterId(String registerId);
}
